'use strict';

const fs = require('fs-extra');
const path = require('path');
const Subscription = require('egg').Subscription;

class AutoDelFile extends Subscription {
    static get schedule() {
        return {
            cron: '0 0 0 * * *', // 每天0点执行
            type: 'all', // 指定所有的 worker 都需要执行
            disable:false
        };
    }

    async subscribe() {
        //公共存储位置文件遍历获取
        const filePath = path.join(this.config.baseDir, 'app/public/audio');
        if (fs.existsSync(filePath)) {
            const delTime = this.ctx.helper.dateAdd("d", -7, new Date());
            //开启7天删一次public/public 下的临时文件
            this.delFile(filePath, delTime);
        }
    }

    /**
     * 删除目录下的所有文件
     * @param {*} fileUrl 文件路径
     * @param {*} delTime 文件删除时间
     */
    delFile(fileUrl, delTime) {
        let that = this;
        if (!fs.existsSync(fileUrl)) return;
        if (fs.statSync(fileUrl).isDirectory()) {
            let files = fs.readdirSync(fileUrl);
            let len = files.length;
            if (len > 0) {
                files.forEach(function (file) {
                    let stats = fs.statSync(fileUrl + '/' + file);
                    let fileModifyTime = new Date(stats.mtime);//文件修改时间
                    let url = fileUrl + '/' + file;
                    if (fs.statSync(url).isDirectory()) {
                        that.delFile(url, delTime);
                    } else {
                        if (fileModifyTime < delTime) {
                            fs.unlinkSync(url);
                        }
                    }
                });
            } else if (len == 0) {
                fs.rmdirSync(fileUrl);
            }
        } else {
            let stats = fs.statSync(fileUrl);
            let fileModifyTime = new Date(stats.mtime);//文件修改时间
            if (fileModifyTime < delTime) {
                fs.unlinkSync(unlinkSync);
            }
        }
    }

}

module.exports = AutoDelFile;
